from OpenGL.GL import *
from OpenGL.GLU import *
import gtk.gtkgl.apputils

from OpenGL.GLUT import *

# Ogl Canvas. The following variables are available:
# Have fun!
fogMode = None

def renderSphere(x, y, z):
   glPushMatrix()
   glTranslatef (x, y, z)
   glutSolidSphere(0.4, 16, 16)
   glPopMatrix()

def i():
    print "i"
    position = [ 0.5, 0.5, 3.0, 0.0 ]
    glEnable(GL_DEPTH_TEST)
    glLightfv(GL_LIGHT0, GL_POSITION, position)
    glEnable(GL_LIGHTING)
    glEnable(GL_LIGHT0)
    mat = [0.1745, 0.01175, 0.01175, 1.0]
    glMaterialfv(GL_FRONT, GL_AMBIENT, mat)
    mat[0] = 0.61424; mat[1] = 0.04136; mat[2] = 0.04136
    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat)
    mat[0] = 0.727811; mat[1] = 0.626959; mat[2] = 0.626959
    glMaterialfv(GL_FRONT, GL_SPECULAR, mat)
    glMaterialf(GL_FRONT, GL_SHININESS, 0.6*128.0)

    glEnable(GL_FOG)
    fogColor = [0.5, 0.5, 0.5, 1.0]
    print "i"

#    global fogMode
    fogMode = GL_EXP
    glFogi (GL_FOG_MODE, fogMode)
    glFogfv (GL_FOG_COLOR, fogColor)
    glFogf (GL_FOG_DENSITY, 0.35)
    glHint (GL_FOG_HINT, GL_DONT_CARE)
    glFogf (GL_FOG_START, 1.0)
    glFogf (GL_FOG_END, 5.0)
    glClearColor(0.5, 0.5, 0.5, 1.0)

def d(wigth,heigth):
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    renderSphere (-2., -0.5, -1.0)
    renderSphere (-1., -0.5, -2.0)
    renderSphere (0., -0.5, -3.0)
    renderSphere (1., -0.5, -4.0)
    renderSphere (2., -0.5, -5.0)
    glFlush()
    
def r(w,h):
    glViewport(0, 0, w, h)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    if (w <= h):
        glOrtho(-2.5, 2.5, -2.5*h/w, 2.5*h/w, -10.0, 10.0)
    else:
        glOrtho(-2.5*w/h, 2.5*w/h, -2.5, 2.5, -10.0, 10.0)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

INIT = i
DISPLAY = d
RESHAPE = r
